SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE [dbo].[paEjecutarRectificacionDeLicenciaBK30042009]
-- <DESCRIPCION> Ejecuta una Rectificacion de Datos de Una Licencia o Elimina una Licencia dada
-- <ACTUALIZACIONES> 26 - 06 -2006 por SANES,  Jorge, Se inicializo variable @SubServicio, se cambio para que Actualice Cola y Plaza de Movimientos, se corrigio para que guarde la normafin
-- <ACTUALIZACIONES> 13 - 09 -2007 por SANES,  Jorge, se actualizo el tema de la Licencia Confirmada -- Referencia Busqueda 13-09-2007
-- <ACTUALIZACIONES> 12 - 02 - 2009 por OTERO, Marcelo y SANES,  Jorge, cuando se borra la licencia teniamos problemas al borrar registros normales, se cambio que mire solo la situacion laboral referencia "se comento el 12/02/2009"
-- <ACTUALIZACIONES> 12 - 02 - 2009 por OTERO, Marcelo y SANES,  Jorge, cuando se borra la licencia y se inserta el periodo normal nuevo, se arreglo que guarde la Situacion Extraordinaria heredada


@idCola INT,
--Viene el codigo de norma
@Norma INT = NULL,
@RectificaFin INT,
@TipoDeLicencia INT OUTPUT,
@SubServicioDeLaNorma INT OUTPUT,
@EsForzado BIT
AS
SET NOCOUNT ON
-- Atributos del subservicio a guardar  (tbSubServiciosRectificados) o elminar.
DECLARE @ServicioAgente INT
DECLARE @NroOrden INT
DECLARE @FechaAlta DATETIME
DECLARE @Baja varchar(1)
DECLARE @FechaBaja DATETIME
DECLARE @FechaTermino DATETIME
DECLARE @Movimiento INT
DECLARE @TramiteAlta INT
DECLARE @TramiteBaja INT
DECLARE @NormaInicio INT
DECLARE @NormaFin INT
DECLARE @Plaza INT
DECLARE @SituacionLaboral INT
DECLARE @SituacionExtraordinaria INT
DECLARE @Nivel INT
DECLARE @Modalidad INT
DECLARE @Zona INT
DECLARE @Licencia INT
DECLARE @CodEnfermedad INT
DECLARE @EntidadCertificadora INT
DECLARE @NroCertificado INT
DECLARE @FechaCertificado DATETIME
DECLARE @EstadoLiqExt INT
DECLARE @idSubServicio INT
DECLARE @Error INT
DECLARE @Diagnostico varchar(300)
DECLARE @Servicio INT
DECLARE @FBajaAux DATETIME
DECLARE @BajaS varchar(1)

-- Atributos del SS Licencia a INSERTar en la cola
DECLARE @Agente INT
DECLARE @PlazaC INT
DECLARE @Fecha DATETIME
DECLARE @Organizacion INT
DECLARE @REsponsable INT
DECLARE @Fecha1 DATETIME
DECLARE @Fecha2 DATETIME
DECLARE @FechaTerminoC DATETIME
DECLARE @SitRev INT
DECLARE @NivelC INT
DECLARE @modalidadC INT
DECLARE @zonaC INT
DECLARE @cargosalarial INT
DECLARE @LicenciaC INT
DECLARE @cantidadhoras INT
DECLARE @movimientoC INT
DECLARE @estado INT
DECLARE @observaciones varchar(255)
DECLARE @CausaAlta INT
DECLARE @borrar varchar(1)
--DECLARE @Diagnostico varchar(1000)
DECLARE @Destino INT
DECLARE @SubServicio INT
DECLARE @normatemp INT
DECLARE @Enfermedad INT
DECLARE @Confirmada VARCHAR(1)

SELECT @Error = 0


-- Se Inicializo @SubServicio - 26-06-2006
SELECT @TipoDeLicencia = 0, @SubServicioDeLaNorma = 0, @SubServicio=0

--BEGIN Transaction Forzar

DECLARE @contador INT
UPDATE tb_MovimientosDocentes set contador = contador + 1, anio = year(getdate()) WHERE idMovimiento = 1
SELECT @contador = contador FROM tb_MovimientosDocentes WHERE idMovimiento = 1

--Saco los valores de la ColaDeMovimientos correspondientes a idCola
SELECT @Agente = Agente, @PlazaC = Plaza, @Fecha = Fecha, @Organizacion = Organizacion, @Responsable = Responsable, @Fecha1 = Fecha1,
	@Fecha2 = Fecha2, @SitRev = SitRev, @NivelC = Nivel, @ModalidadC = Modalidad, @ZonaC = Zona, @cargosalarial = cargosalarial, @licenciaC = licencia,
	@cantidadhoras = cantidadhoras, @movimientoC = movimiento, @Estado = Estado, @Observaciones = observaciones, @CausaAlta = CausaAlta, 
	@FechaTerminoC = FechaTermino
   FROM tb_ColaDeMovimientos 
   WHERE idCola = @idCola

-- Obtengo el subservicio a rectificar
SELECT @idSubServicio = RectificaA, @borrar=borrar, @Enfermedad = Enfermedad, @Confirmada = Confirmada
	FROM tb_PlazasDeMovimiento 
	WHERE idCola = @idCola

-- Primero extraigo todos los valores del SubServicio que se va a rectificar.
SELECT @ServicioAgente = Servicioagente, @NroOrden = NroOrden9, @FechaAlta = FechaAlta, @FechaBaja = Fechabaja,@FechaTermino = FechaTermino, @Movimiento = Movimiento,
	@TramiteAlta = TramiteAlta, @TramiteBaja = TramiteBaja, @NormaInicio = NormaInicio, @NormaFin = NormaFin, @Plaza = Plaza,
	@Nivel = Nivel, @Modalidad = Modalidad, @Zona = Zona, @Licencia = Licencia, @CodEnfermedad = CodEnfermedad,
	@NroCertificado = NroCertificado, @EntidadCertificadora = EntidadCertificadora, @FechaCertificado = FechaCertificado, @EstadoLiqExt = EstadoLiqExt, @BajaS = Baja
   FROM tb_SubServiciosAgentes 
   WHERE idSubServicio = @idSubServicio


-- Si la licencia requiere enfermedad y no se especifica al momento de cargar NO se confirma el movimiento. Para el Resto de los casos mantiene lo que se puso en la pantalla (13-09-2007)
IF (SELECT RequiereRegEnfermedad FROM Tb_Licencias WHERE idLicencia = @LicenciaC) = 'S' AND (@Enfermedad IS NULL OR @Enfermedad = 0) 
	SELECT @Confirmada = 'N'
ELSE 
	IF  (SELECT RequiereRegEnfermedad FROM Tb_Licencias WHERE idLicencia = @LicenciaC) = 'N'  AND  (SELECT SituacionLaboralAsociada FROM Tb_Licencias WHERE idLicencia = @LicenciaC) <> 1 AND @Fecha2 IS NULL
			SELECT @Confirmada = 'N'


-- Si se rectifica como INICIO
IF @RectificaFin = 0
BEGIN
	IF @Norma IS NULL
		SELECT @Norma = @NormaInicio
END
ELSE
	IF @RectificaFin > 0 and @Norma is NULL   -- Modificado el 26-6-06 porque no guardaba la normafin
		SELECT @Norma = @NormaFin

SELECT @FBajaAux = @FechaBaja

SELECT @Servicio = ServicioAgente FROM tb_SubServiciosAgentes WHERE idSubServicio = @idSubServicio

-- Borro la licencia a rectificar. (tambien se puede guardar)
DELETE FROM tb_SubServiciosAgentes WHERE idSubServicio = @idSubServicio

IF @@ERROR <> 0
	SELECT @Error = @@ERROR

IF @Borrar = 'S'
	BEGIN	
		DECLARE @sla INT
		DECLARE @sea INT
		DECLARE @FechaAltaA DATETIME	
		DECLARE @ids INT
		DECLARE @slp INT
		DECLARE @sep INT
		DECLARE @FechaBajaP DATETIME
		SELECT @ids = idSubServicio, @sla = situacionlaboral, @sea = situacionextraordinaria, @FechaAltaA = FechaAlta FROM tb_SubServiciosAgentes WHERE dateadd(day,-1,@fechaalta) = FechaBaja AND ServicioAgente = @Servicio
	
		--Aca verificaba que sea un periodo normal para modificarlo
		IF (@sla = 5) --  AND (@sea=1)  se comento el 12/02/2009
		BEGIN
			SELECT @FechaAlta = @FechaAltaA
			DELETE FROM tb_SubServiciosAgentes WHERE idsubServicio = @ids
			IF @@ERROR <> 0
				SELECT @Error = @@ERROR
		END
	
		SELECT @ids = idsubServicio, @slp = situacionlaboral, @sep = situacionextraordinaria, @FechaBajaP = FechaBaja FROM tb_SubServiciosAgentes WHERE dateadd(day,1,@fechabaja) = FechaAlta AND ServicioAgente = @Servicio
	
		--Aca verificaba que sea un periodo normal
		IF (@slp = 5)  --AND (@sep=1)  se comento el 12/02/2009
		BEGIN
			SELECT @FechaBaja = @FechaBajaP
			DELETE FROM tb_SubServiciosAgentes WHERE idsubServicio = @ids
			IF @@ERROR <> 0
				SELECT @Error = @@ERROR
		END
	
		DECLARE @BajaSS varchar(1)
		IF @FechaBaja IS NULL
			SELECT @BajaSS = 'N'
		ELSE
			SELECT @BajaSS = 'S'
	
		IF @sea IS NULL 
			SET @sea = 1			

		INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertificadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertificado,
		FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertificado, NroOrden9, Plaza, ServicioAgente, SituacionExtraordinaria,
		SituacionLaboral, TramiteAlta, TramiteBaja, Zona)
		VALUES (@BajaSS, null, null, 1, @FechaAlta , @FechaBaja, null, null, null, @ModalidadC, 5, @NivelC, null, null, null, @NroOrden, @Plaza, @Servicio, @sea ,5, null, null, 0) -- 12-02-2009 se puso SituacionExtraordinaria = @sea, tenia un 1 
		--
		-- Corregido 26-06-2006
		SELECT @Error = @@ERROR, @SubServicio = @@IDENTITY
	
		SELECT @SubServicioDeLaNorma = -1
		SELECT @TipoDeLicencia = -1

		-- Actualizar Cola y Plaza de Movmientos
		UPDATE tb_ColaDeMovimientos SET Estado = CASE WHEN @EsForzado = 0 THEN 4 ELSE 5 END, NTUserEjecutor = SYSTEM_USER, FechaEjecucion = GETDATE()  WHERE idCola = @idCola
		UPDATE tb_PlazasDeMovimiento SET Servicio = @SubServicio WHERE idCola = @idCola
	
	END
ELSE
             BEGIN
		
		DECLARE @sitlab INT
		DECLARE @sitext INT
		DECLARE @idss INT
		DECLARE @FAlta DATETIME
		DECLARE @FBaja DATETIME
		IF @Fecha1 > @FechaAlta
		BEGIN
			SELECT @sitlab = situacionlaboral, @sitext = situacionextraordinaria, @idss = idSubServicio, @FAlta = FechaAlta
				 FROM tb_SubServiciosAgentes 
				WHERE ServicioAgente = @Servicio AND @FechaAlta = dateadd(day,1,FechaBaja)
			
			--Verificaba que sea un periodo normal
			IF @sitlab=5 AND @sitext=1 
			BEGIN
				SELECT @FechaAlta = @FAlta
				DELETE FROM tb_SubServiciosAgentes WHERE idsubServicio = @idss
				IF @@ERROR <> 0
					SELECT @Error = @@ERROR
			END
		
			INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertificadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertificado,
			FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertificado, NroOrden9, Plaza, ServicioAgente, SituacionExtraordinaria,
			SituacionLaboral, TramiteAlta, TramiteBaja, Zona, NormaAnterior)
			VALUES ('S', @Enfermedad, null, 1, @FechaAlta , dateadd(day,-1,@Fecha1), null, null, null, @ModalidadC, 5, @NivelC, null, null, null, @NroOrden, @Plaza, @Servicio, 1,5, null, null, 0, @NormaInicio)
			IF @@ERROR <> 0
				SELECT @Error = @@ERROR
		END 
		
		IF (@Fecha2 < @FechaBaja) AND @FechaBaja IS NOT NULL
		BEGIN
			SELECT @sitlab = situacionlaboral, @sitext = situacionextraordinaria, @idss = idSubServicio, @FBaja = FechaBaja
				 FROM tb_SubServiciosAgentes
				 WHERE ServicioAgente = @Servicio AND @FechaBaja = dateadd(day,-1,FechaAlta)
			-- si es una licencia OJO! NO SE BORRA!!!
			if @sitlab=5 AND @sitext=1 
			BEGIN
				SELECT @FechaBaja = @FBaja
				DELETE FROM tb_SubServiciosAgentes WHERE idsubServicio = @idss
				IF @@ERROR <> 0
					SELECT @Error = @@ERROR
			END
			INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertificadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertificado,
			FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertificado, NroOrden9, Plaza, ServicioAgente, SituacionExtraordinaria,
			SituacionLaboral, TramiteAlta, TramiteBaja, Zona, NormaAnterior)
			VALUES ('S', null, null, 1, dateadd(day,1,@Fecha2) ,@FechaBaja, null, null, null, @ModalidadC, 5, @NivelC, null, null, null, @NroOrden, @Plaza, @Servicio, 1,5, null, null, 0, @NormaInicio)
			IF @@ERROR <> 0
				SELECT @Error = @@ERROR
		
			PRINT 'Pasa por .2.'
		END
		
		IF @Fecha1<@FechaAlta 
		BEGIN
			SELECT @sitlab = situacionlaboral, @sitext = situacionextraordinaria, @idss = idSubServicio, @FBaja = FechaBaja ,@FAlta = FechaAlta
				FROM tb_SubServiciosAgentes
				 WHERE ServicioAgente = @Servicio AND @FechaAlta = dateadd(day,1,FechaBaja)
			-- if @sitlab = 5 AND @sitext=1
		 	IF @Fecha1 = @FAlta
				 DELETE FROM tb_SubserviciosAgentes WHERE idsubServicio = @idss
			ELSE
				UPDATE tb_SubServiciosAgentes SET FechaBaja = dateadd(day,-1, @Fecha1) WHERE idsubServicio = @idss

			IF @@ERROR <> 0
				SELECT @Error = @@ERROR
		END
		IF (@Fecha2>@FechaBaja) AND @FechaBaja Is Not Null 
		BEGIN
			SELECT @sitlab = situacionlaboral, @sitext = situacionextraordinaria, @idss = idSubServicio, @FBaja = FechaBaja 
				FROM tb_SubServiciosAgentes 
				WHERE ServicioAgente = @Servicio AND @FechaBaja = dateadd(day,-1,FechaAlta)
			--if @sitlab = 5 AND @sitext=1
				IF @Fecha2 = @FBaja
					DELETE tb_SubServiciosAgentes  WHERE idsubServicio = @idss
				ELSE 	
					UPDATE tb_SubServiciosAgentes set FechaAlta = dateadd(day,1, @Fecha2), NormaAnterior = @NormaInicio WHERE idsubServicio = @idss

				IF @@ERROR <> 0
					SELECT @Error = @@ERROR
		END
		
		-- Porque la sitlab y la sitext usan los datos del servicio a rectificar y no los relacionados a la nueva licencia
		SELECT @SituacionLaboral = SituacionLaboralAsociada FROM tb_Licencias WHERE idLicencia = @LicenciaC
		SELECT @SituacionExtraordinaria = SituacionExtAsociada FROM tb_Licencias WHERE idLicencia = @LicenciaC
		
		--Alta a la nueva licencia (Se borro anteriormente)
		IF @Plaza IS NOT NULL
		BEGIN
			IF @Fecha2 Is Null
				SELECT @BajaS = 'N'
			ELSE
				SELECT @BajaS = 'S'
		
			INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertificadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertificado,
				FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertificado, NroOrden9, Plaza, ServicioAgente, SituacionExtraordinaria,
				SituacionLaboral, TramiteAlta, TramiteBaja, Zona, confirmada, NormaTemporal)
			VALUES (@BajaS, @Enfermedad, null, 1, @Fecha1 , @Fecha2, null, 
				  null, @LicenciaC, @ModalidadC, 3, @NivelC, CASE @RectificaFin WHEN 1 THEN @Norma ELSE @NormaFin END, CASE @RectificaFin WHEN 0 THEN @Norma ELSE @NormaInicio END, null, @NroOrden, @Plaza, @Servicio, @SituacionExtraordinaria, 
				 @SituacionLaboral, null, null, 0, @Confirmada, @contador) -- Se cambio 'S' por @Confirmada  - 13-09-2007
			SELECT @Error = @@ERROR, @SubServicio = @@IDENTITY
		END
		
		DECLARE @BajaServicio DATETIME
		SELECT @BajaServicio = FechaBaja FROM tb_ServiciosAgentes WHERE idServicioAgente = @Servicio
		
		-- Ahora veo si es el ultimo subservicio que no estaba dado de baja y le doy fecha de baja
		IF @fecha2 is not null AND @BajaServicio is null AND not exists (SELECT top 1 ServicioAgente FROM tb_SubserviciosAgentes WHERE Servicioagente = @Servicio AND FechaAlta > @Fecha2)
		BEGIN
			SELECT @Plaza = Plaza FROM tb_SubServiciosAgentes WHERE idSubServicio = @SubServicio
		
			IF @Plaza IS NOT NULL
			BEGIN
				INSERT INTO tb_SubServiciosAgentes (Baja, CodEnfermedad, EntidadCertificadora, EstadoLiqExt, FechaAlta, FechaBaja, FechaCertificado,
				FechaTermino, Licencia, Modalidad, Movimiento, Nivel, NormaFin, NormaInicio, NroCertificado, NroOrden9, Plaza, ServicioAgente, SituacionExtraordinaria,
				SituacionLaboral, TramiteAlta, TramiteBaja, Zona)
				VALUES ('N', null, null, 1, dateadd(day,1,@Fecha2), null, null, null, null, @ModalidadC, 5, @NivelC, null, null, null, @NroOrden, @Plaza, @Servicio, 1, 5, null, null, 0)
			
				IF @@ERROR <> 0
					SELECT @Error = @@ERROR
			END
		END
		
		----------------------------------------------------------------------------------------------------------------------------------------
		------------------------- PARA CONTROLAR LA BAJA DEL ULTIMO SUBSERVICIO...... 
		----------------------------------------------------------------------------------------------------------------------------------------
		IF EXISTS(SELECT top 1 ServicioAgente FROM tb_SubServiciosAgentes WHERE ServicioAgente = @Servicio AND FechaAlta = DATEADD(DAY, 1, @Fecha2) AND FechaBaja IS NULL)
		  BEGIN
			DECLARE @UltimosIdss INT
			SELECT @UltimosIdss = IdSubServicio 
				FROM tb_SubServiciosAgentes
				 WHERE ServicioAgente = @Servicio AND FechaAlta = DATEADD(DAY, 1, @Fecha2) AND FechaBaja IS NULL
		 	UPDATE tb_SubServiciosAgentes SET Baja = 'N' WHERE IdSubServicio = @UltimosIdss
		  END
		
		-- Actualizar Cola y Plaza de Movmientos
		UPDATE tb_ColaDeMovimientos SET Estado = CASE WHEN @EsForzado = 0 THEN 4 ELSE 5 END, NTUserEjecutor = SYSTEM_USER, FechaEjecucion = GETDATE()  WHERE idCola = @idCola
		UPDATE tb_PlazasDeMovimiento set Servicio = @SubServicio WHERE idCola = @idCola
		
		--
		IF Exists(SELECT top 1 ServicioAgente FROM tb_subserviciosagentes ss, tb_serviciosagentes sa WHERE ss.servicioagente = sa.idservicioagente AND ss.licencia = @licenciaC AND ss.fechaalta = @fecha1)
		  BEGIN
			SELECT @NormaTemp = normatemporal FROM tb_subserviciosagentes ss, tb_serviciosagentes sa WHERE ss.servicioagente = sa.idservicioagente AND ss.licencia = @licenciaC AND ss.fechaalta = @fecha1
			UPDATE tb_subserviciosagentes set normatemporal = @normatemp WHERE idsubservicio = @subservicio
		  END
	
		--SELECT @LicenciaC IdLicencia, @SubServicio SubServicio, 0 Cod, '1' Diagnostico
		SELECT @SubServicioDeLaNorma = @SubServicio
		SELECT @TipoDeLicencia =  @LicenciaC
		
             END -- /ELSE Borrar = 'S
GO
